package com.eapi.project.utils;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Redis 连接池工具
 */
public class JedisPoolUtil {

    private static final String HOST = "r-bp1yjtnfoml2vk5nrspd.redis.rds.aliyuncs.com";
    private static final int PORT = 6379;

    private static volatile JedisPool jedisPool = null;

    static {
        jedisPool = getJedisPoolInstance();
    }

    /**
     * 获取RedisPool实例（单例）
     * @return RedisPool实例
     */
    public static JedisPool getJedisPoolInstance() {
        if (jedisPool == null) {
            synchronized (JedisPoolUtil.class) {
                if (jedisPool == null) {

                    JedisPoolConfig poolConfig = new JedisPoolConfig();
                    poolConfig.setMaxTotal(1000);           // 最大连接数
                    poolConfig.setMaxIdle(32);              // 最大空闲连接数
                    poolConfig.setMaxWaitMillis(100*1000);  // 最大等待时间
                    poolConfig.setTestOnBorrow(true);       // 检查连接可用性, 确保获取的redis实例可用

                    jedisPool = new JedisPool(poolConfig, HOST, PORT);
                }
            }
        }

        return jedisPool;
    }

    /**
     * 从连接池中获取一个 Jedis 实例（连接）,处理完业务员之后，还回连接池
     */
    public static void testRedis() {
        Jedis jedis = null;
        try {
            //jedisPool建议封装成工具类；并采用单例模式（桌静态对象）
            jedis = jedisPool.getResource();  // 获取Redus连接
            // 业务
            jedis.set("k1", "v111");
            System.out.println(jedis.get("k1"));
        }catch(Exception e){
            e.printStackTrace();
        } finally {
            if(jedis != null){
                //jedisPool.returnResourceObject(jedis);  // 已废弃，推荐使用jedis.close()方法
                jedis.close(); // 关闭redis连接,还回redis连接池中；
            }
        }
    }

}
